Current application programming interfaces (APIs), that interface high-performance networking applications with the kernel of a computing device, are not well equipped to handle the increased data processing demands of networking applications. For example, the “Windows Socket” API, known as “Winsock”, is configured to facilitate operations issued by applications to send and receive data to and from the kernel layer which communicates with a physical network device. Send and receive operations are generally issued multiple times over the course of the socket's lifetime. Accordingly, the send and receive processing overhead can constitute the majority of the network processing and perhaps of the application as a whole.
In the traditional Winsock API, for example, initiating the send and receive operations involve making a system call to pin user-mode virtual memory to physical memory and to initiate the transfer of data into the kernel. Then an additional system call is typically required to get the completion status of the transfer and to unpin the user-mode virtual memory from the physical memory. Accordingly, existing Winsock send and receive APIs may incur redundant memory pinning and unpinning if the application uses the same memory over and over again for sending and receiving data.